/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package spaceinvaders;

import java.awt.Point;

/**
 *
 * @author jorge
 */
public abstract class Figura
{
    protected Point coordenada;
    protected int forma[][];
    protected int tamanoAlto;
    protected int tamanoAncho;

    public Figura(Point coordenada, int tamanoAlto, int tamanoAncho)
    {
        this.coordenada = new Point(coordenada);
        this.tamanoAlto = tamanoAlto;
        this.tamanoAncho = tamanoAncho;
        this.forma = new int[this.tamanoAlto][this.tamanoAncho];
    }

    public Point getCoordenada()
    {
        return this.coordenada;
    }

    public int getTamanoAlto()
    {
        return this.tamanoAlto;
    }

    public int getTamanoAncho()
    {
        return this.tamanoAncho;
    }

    public int[][] getForma()
    {
        return this.forma;
    }

    public void setCoordenada(Point coordenada)
    {
        this.coordenada = coordenada;
    }

    public void setTamanoAlto(int tamanoAlto)
    {
        this.tamanoAlto = tamanoAlto;
    }

    public void setTamanoAncho(int tamanoAncho)
    {
        this.tamanoAncho = tamanoAncho;
    }

    /**
     * inicializa la matriz de forma con ceros.
     */
    public void inicializarForma()
    {
        for(int i = 0 ; i < this.tamanoAlto ; i++)
        {
            for(int j = 0 ; j < this.tamanoAncho ; j++)
            {
                this.forma[i][j] = 0;
            }
        }
    }

    /**
     * inicializarn la matris de forma con el diseño del dibujo.
     * @param forma
     */
    public void darForma(String forma)
    {
        int k = 0;
        Character c;

        for(int i = 0 ; i < this.tamanoAlto ; i++)
        {
            for(int j = 0 ; j < this.tamanoAncho ; j++)
            {
                c = new Character(forma.charAt(k));
                this.forma[i][j] = new Integer(c.toString());
                k++;
            }
        }

        //mostrarFigura();
    }

    /**
     * desplaza la matriz forma en una unidad dependiendo de la direccion dada.
     * @param direccion si toma valor 1 se deplaza a la derecha, si es 2 a la izquierda, 3 abajo y 4 arriba.
     */
    public void desplazar(int direccion)
    {
        switch(direccion)
        {
            case 1:
            {
                getCoordenada().translate(1, 0);
                break;
            }
            case 2:
            {
                getCoordenada().translate(-1, 0);
                break;
            }
            case 3:
            {
                getCoordenada().translate(0, 2);
                break;
            }
            case 4:
            {
                getCoordenada().translate(0, -1);
                break;
            }
            default:
            {
                break;
            }
        }
    }

    public void mostrarFigura()
    {
        for(int i = 0 ; i  < this.tamanoAlto ; i++)
        {
            for(int j = 0 ; j < this.tamanoAncho ; j++)
            {
                System.out.print(this.forma[i][j]);
            }

            System.out.println();
        }

        System.out.println();
    }

    public abstract void cambiarForma();
}
